參考資料
https://www.finlab.tw/%E8%B6%85%E7%B0%A1%E5%96%AE-machine-learning-%E9%A0%90%E6%B8%AC%E8%82%A1%E5%83%B9/
https://github.com/WillKoehrsen/Data-Analysis/tree/master/stocker
正文
今天這篇不用安裝程式,我們直接在雲端寫code,適合完完全全的初學者!
首先來說說什麼是MODEL(模型)?
模型就是一種能夠預測真實資料的數學公式,
通常會是一個function,例如 f 好了,
假如我們有一條時間序列 f(t) = at + b
只要知道了變數 a 跟 b,就可以計算出 t 每一刻的 f(t) 是多少
要怎麼知道 a 跟 b 是多少?
只要看其中兩個歷史時刻的位置即可:例如我們知道 f(1) = 1 且 f(2) = 2
則我們可以推算出 a = 1 且 b = 0,
並且預知 f(3) = 3 、 f(4) = 4 、 f(5) = 5 …
股價模型也是一樣,但是這個模型會比較複雜,不會只有 a、b 而已
不過規則是一樣的,我們要用歷史股價去計算類似 a、b 的變數,通常稱之為 fitting
找到 a、b 後就能夠用模型來預測股價了!
接著我們介紹一下預測股價的模型,預言家模型
預言家模型最厲害的地方,就是用多條 Fourier Series,去擬合(fitting)時間序列,有興趣可以參考 fb論文
可以將週期調整至「每年」「每季」「每週」!
模型簡單可以寫成這樣:f(t) = year(t) + season(t) + week(t) + trend(t)
甚至在fitting完(找到a、b等參數後)可以將 f(t) 的成分拆解出來看:
而最後的 f(t) 就是這些曲線的疊加,由上圖第三張,我們可以額外發現,聖誕節的時候,使用FB的人數下降非常快
外國的聖誕節,就是與家人團聚的時光,(像是我們的農曆新年)所以不太會用手機的緣故
回到正題,開始在雲端上寫code
https://colab.research.google.com/
打開連結,開啟新的notebook,在雲端寫程式!
首先在任意cell輸入:
!git clone https://github.com/koreal6803/Stocker.git
!pip install -r Stocker/requirements.txt
接下來,刪除惱人的warrning
輸入:
import warnings
warnings.filterwarnings('ignore')
接著讀入附帶的台積點股價
輸入:
import pandas as pd
df = pd.read_csv('Stocker/price.csv', index_col='date', parse_dates=['date'])
price = df.squeeze()
price.head()
創建Stocker
Stocker下載連結在參考資料第二行
下載後,把股價的series丟進去就可以了:
from Stocker.stocker import Stocker
tsmc = Stocker(price)
接下來我們就可以預測中期走勢,只需要輸入一行:
model, model_data = tsmc.create_prophet_model(days=90)
其中綠色的就是預測出來的股價,而淺綠色區域就是信賴區間,股價大約就會落於此區間內,程式中的信賴區間為80%,也代表了,每五天就約有一天的股價會落於信賴區間之外,可以看到預測時間越久(沒實際股價的地方),不確定性越大,所以綠色的區間也就稍微變大